package cn.wolfcode.crm.mapper;

import cn.wolfcode.crm.domain.Gathering;
import cn.wolfcode.crm.domain.Officialstu;
import cn.wolfcode.crm.query.QueryForObject;
import cn.wolfcode.crm.query.ReportQueryForObject;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface OfficialstuMapper {

    /**
     * 添加正式学员信息
     * @param record
     * @return
     */
    int insert(Officialstu record);

    /**
     * 根据di查正式学员信息
     * @param id
     * @return
     */
    Officialstu selectByPrimaryKey(Long id);

    /**
     * 查所有学员信息
     * @return
     */
    List<Officialstu> selectAll();

    /**
     * 更新学员
     * @param record
     * @return
     */
    int updateByPrimaryKey(Officialstu record);


    //分页
    int queryForCount(QueryForObject qo);
    List<Officialstu> queryForList(QueryForObject qo);

    /**查询未付清的学员
     *
     * @return
     */
    List<Officialstu> selectNoPayAll();

    /**
     * 根据学员查学员基本信息
     * @param id
     * @return
     */
    Officialstu queryById(Long id);

    /**
     * 改变缴款状态
     */
    void changeFeeState(Officialstu officialstu);

    /**
     * 改变学员状态 1在读 2转班中 3休学 4退学
     */
    void changeState(@Param("stuId") Long stuId, @Param("state") Integer state);

    /**
     * 改变学员班级和状态(1在读 2转班中 3休学 4退学)
     * @param stuId 要改变的学员id
     * @param newGradeId 新的班级id
     * @param state 状态
     */
    void changeClasses(@Param("stuId") Long stuId, @Param("newGradeId")Long newGradeId, @Param("state")Integer state);

    /**
     * 根据大客户(学校)id查该学校有多少人成为正式学员
     * @param id 大客户(学校)id
     * @return 正式学员数量
     */
    int selectAllStudentByBigClient(Long id);


    /**
     * 根据学员流失表退款状态查到对应学员
     * @return
     */
    List<Officialstu> selectAllByRefundState();


    /**
     * 分组查询
     * @return
     */
    List<Map<String,Object>> selectGroupBy(ReportQueryForObject groupName);
}